﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Iudicium.Persona;
using Iudicium.Persona.CRN;
using log4net;
using Iudicium.Contactos;
using Iudicium.Contactos.CRN;

public partial class Personas_PersonaJuridica_FormularioPersonaJuridica : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("LogFile");

    private int PersonaId
    {
        set { PersonaIdHiddenField.Value = value.ToString(); }
        get
        {
            int personaId = 0;
            try
            {
                personaId = Convert.ToInt32(PersonaIdHiddenField.Value);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo convertir PersonaIdHiddenField.Value a un valor entero", ex);
            }
            return personaId;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ObtenerParametros();
        }
    }

    private void ObtenerParametros()
    {
        if (Session["PersonaJuridicaId"] != null && !string.IsNullOrEmpty(Session["PersonaJuridicaId"].ToString()))
        {
            PersonaIdHiddenField.Value = Session["PersonaJuridicaId"].ToString();
            CargarDatos();
        }
        Session["PersonaJuridicaId"] = null;
    }

    private void CargarDatos()
    {
        PersonaJuridica objPersona = null;
        try
        {
            objPersona = PersonaJuridicaCRN.GetPersonaJuridicaByPersonaId(PersonaId);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener la persona con id: " + PersonaId, ex);
        }
        if (objPersona == null)
            return;

        Representantes.PersonaJuridicaId = PersonaId;
        RazonSocialTextBox.Text = objPersona.RazonSocial;
        NitTextBox.Text = objPersona.Nit;
        ContactosPersona.PropietarioId = PersonaId;
    }

    protected void GuardarLinkButton_Click(object sender, EventArgs e)
    {
        PersonaJuridica objPersona = new PersonaJuridica(PersonaId,
            RazonSocialTextBox.Text,
            NitTextBox.Text);

        List<Contacto> contactosInsertados = ContactosPersona.InsertedContacts;
        string representantesInsertados = Representantes.RepresentantesInsertados;

        if (PersonaId == 0)
        {
            try
            {
                PersonaId = PersonaJuridicaCRN.InsertPersonaJuridica(objPersona);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo insertar la persona", ex);
                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "El registro de la Persona no se pudo completar correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Error);
                return;
            }
            foreach (Contacto obj in contactosInsertados)
            {
                obj.TipoPropietarioContacto = Contacto.TipoPropietario.Persona;
                obj.PropietarioId = PersonaId;
                try
                {
                    ContactoCRN.InsertContacto(obj);
                }
                catch (Exception ex)
                {
                    log.Error("No se pudo insertar el contacto para la personaNatural con id " + PersonaId, ex);
                }
            }
            if (!string.IsNullOrEmpty(representantesInsertados))
            {
                try
                {
                    RepresentanteCRN.InsertRepresentanteByList(PersonaId, representantesInsertados);
                }
                catch (Exception ex)
                {
                    log.Error("No se pudo insertar los representantes de la Persona Juridica", ex);
                }
            }
            Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "El registro de la Persona se realizó correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Alert);
        }
        else
        {
            try
            {
                PersonaJuridicaCRN.UpdatePersonaJuridica(objPersona);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo actualizar los datos de la Persona", ex);
                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "Los datos de la Persona no se pudieron editar correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Error);
                return;
            }

            foreach (Contacto obj in contactosInsertados)
            {
                obj.TipoPropietarioContacto = Contacto.TipoPropietario.Persona;
                obj.PropietarioId = PersonaId;
                try
                {
                    ContactoCRN.InsertContacto(obj);
                }
                catch (Exception ex)
                {
                    log.Error("No se pudo insertar el contacto para la personaNatural con id " + PersonaId, ex);
                }
            }

            string contactosEliminados = ContactosPersona.DeletedContacts;
            if (!string.IsNullOrEmpty(contactosEliminados))
            {
                try
                {
                    ContactoCRN.DeleteContactoByListId(PersonaId, contactosEliminados, Contacto.TipoPropietario.Persona);
                }
                catch (Exception ex)
                {
                    log.Error("No se puediero eliminar los contactos de la persona", ex);
                }
            }
            if (!string.IsNullOrEmpty(representantesInsertados))
            {
                try
                {
                    RepresentanteCRN.InsertRepresentanteByList(PersonaId, representantesInsertados);
                }
                catch (Exception ex)
                {
                    log.Error("No se pudo insertar los nuevos representantes de la Persona Juridica", ex);
                }
            }
            string representantesEliminados = Representantes.RepresentantesEliminados;
            if (!string.IsNullOrEmpty(representantesEliminados))
            {
                try
                {
                    RepresentanteCRN.DeleteRepresentantesByIdList(PersonaId, representantesEliminados);
                }
                catch (Exception ex)
                {
                    log.Error("No se pudo eliminar los representantes de la Persona Juridica", ex);
                }
            }
            Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "Los datos de la Persona se editaron correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Alert);
        }
        Response.Redirect("~/Personas/PersonaJuridicas/ListaPersonasJuridicas.aspx");
    }
}
